package com.gxc.array;

import java.util.*;

/**
 * 2766. 重新放置石块
 * 给你一个下标从 0 开始的整数数组 nums ，表示一些石块的初始位置。
 * 再给你两个长度 相等 下标从 0 开始的整数数组 moveFrom 和 moveTo 。
 *
 * 在 moveFrom.length 次操作内，你可以改变石块的位置。在第 i 次操作中，
 * 你将位置在 moveFrom[i] 的所有石块移到位置 moveTo[i] 。
 *
 * 完成这些操作后，请你按升序返回所有 有 石块的位置。
 *
 * 注意：
 * 如果一个位置至少有一个石块，我们称这个位置 有 石块。
 * 一个位置可能会有多个石块。
 */
public class RelocateMarbles {

    public static void main(String[] args) {
//        print(handle(new int[]{1,6,7,8}, new int[]{1,7,2}, new int[]{2,9,5}));
//
//        print(handle(new int[]{1,1,3,3}, new int[]{1,3}, new int[]{2,2}));


        print(handle(new int[]{4,6,6,9,18}, new int[]{18,6,17,4,9,19,2}, new int[]{23,17,20,19,11,2,20}));
    }


    public static List<Integer> handle(int[] nums, int[] moveFrom, int[] moveTo) {
        for (int i = 0; i < moveFrom.length; i++) {
            for (int j = 0; j < nums.length; j++) {
                if (nums[j] == moveFrom[i]) {
                    nums[j] = moveTo[i];
                }
            }
        }
        Arrays.sort(nums);

        Set<Integer> list = new LinkedHashSet<>();
        for (int i = 0; i < nums.length; i++) {
            list.add(nums[i]);
        }
        return new ArrayList<>(list);
    }

    private static void print(List<Integer> list) {
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i) + " ");
        }
    }

    class Solution {
        public List<Integer> relocateMarbles(int[] nums, int[] moveFrom, int[] moveTo) {
            Set<Integer> set = new HashSet<>();
            for (int num : nums) {
                set.add(num);
            }
            for (int i = 0; i < moveFrom.length; i++) {
                set.remove(moveFrom[i]);
                set.add(moveTo[i]);
            }

            List<Integer> ans = new ArrayList<>(set);
            Collections.sort(ans);

            return ans;
        }
    }
}
